/*
洛谷1331
6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#

输出：
    为每一个段落输出一行解。如果船的位置放得正确（即棋盘上只存在相互之间不能接触的方形，
    如果两个“#”号上下相邻或左右相邻却分属两艘不同的船只，则称这两艘船相互接触了）。
    就输出一段话“There are S ships.”,S表示船只的数量。否则输出“Bad placement.”。
*/
/*
这个题和别的题不同的地方在于：别的岛屿只要是连在一起就行，但这个题要求岛屿必须为方形，那么难点就在于判断是否出现畸形的方块

方法：
    如果图是不和法的，一定存在如下结构：
# # 
. #
或
# #
# .
或
# .
# #
或
. #
# #
即在一个2*2的方格中有三个#。
*/
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[105][105];
int ans=0;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
//判断畸形方块
int pd(int i,int j){
	int c=0;
	if(a[i][j]=='#') c++;
	if(a[i+1][j]=='#') c++;
	if(a[i][j+1]=='#') c++;
	if(a[i+1][j+1]=='#') c++;
	if(c==3) return 0;
	return 1;
}
void dfs(int x,int y){
	a[x][y]='.';
	for(int i=0;i<4;i++){
		int tx=x+dx[i];
		int ty=y+dy[i];
		if(a[tx][ty]=='#'&&tx>=1&&tx<=n&&ty>=1&&ty<=m){
			dfs(tx,ty);
		}
	}   
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(pd(i,j)==0){
				cout<<"Bad placement.";
				return 0;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='#'){
				ans++;
				dfs(i,j);
			}
		}
	}
	printf("There are %d ships.",ans);
	return 0;
} 







